<template>
  <a-spin :spinning="confirmLoading">
    <j-form-container :disabled="formDisabled">
      <!-- 主表单区域 -->
      <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
        <span style="color: red;">说明：1.退休提租补贴正常滚动。 单位：元
        </span>
        <a-row>
          <a-col :xs="12" :sm="12">
            <a-form-model-item label="年度" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="year">
              <j-dict-select-tag type="list" v-model="model.year" dictCode="year" placeholder="请选择年度"
                @change="handleYearChange" />
            </a-form-model-item>
          </a-col>
        </a-row>
      </a-form-model>
    </j-form-container>
    <!-- 子表单区域 -->
    <a-tabs v-model="activeKey" @change="handleChangeTabs">
      <a-tab-pane tab="退休人员工资及保险明细表" :key="refKeys[0]" :forceRender="true">
        <j-editable-table :ref="refKeys[0]" :loading="cwTxrygzjbxmxbTable.loading"
          :columns="cwTxrygzjbxmxbTable.columns" :dataSource="cwTxrygzjbxmxbTable.dataSource" :maxHeight="300"
          :disabled="formDisabled" :rowNumber="true" :rowSelection="true" :actionButton="true"
          @valueChange="handleTableValueChange" />
      </a-tab-pane>
    </a-tabs>
  </a-spin>
</template>

<script>
import { mapState } from 'vuex'
import { FormTypes, getRefPromise, VALIDATE_NO_PASSED } from '@/utils/JEditableTableUtil'
import { JEditableTableModelMixin } from '@/mixins/JEditableTableModelMixin'
import { validateDuplicateValue } from '@/utils/util'
import { getAction } from '@/api/manage'

export default {
  name: 'CwTxrygzjbxmxbTjForm',
  mixins: [JEditableTableModelMixin],
  components: {},
  data() {
    return {
      labelCol: {
        xs: { span: 24 },
        sm: { span: 5 },
      },
      wrapperCol: {
        xs: { span: 24 },
        sm: { span: 16 },
      },
      model: { year: '' }, // 初始为空，由watch同步全局年度
      validatorRules: {
        unit: [
          { required: true, message: '请选择单位!' },
        ],
        year: [
          { required: true, message: '请选择年度!' },
        ],
      },
      addDefaultRowNum: 1,
      refKeys: ['cwTxrygzjbxmxb'],
      tableKeys: ['cwTxrygzjbxmxb'],
      activeKey: 'cwTxrygzjbxmxb',
      confirmLoading: false,
      // 退休人员工资及保险明细表
      cwTxrygzjbxmxbTable: {
        loading: false,
        dataSource: [],
        columns: [
          // {
          //   title: '财政/非财政',
          //   key: 'czFcz',
          //   type: FormTypes.select,
          //   dictCode: "cz_fcz",
          //   width: "200px",
          //   placeholder: '请输入${title}',
          //   defaultValue: '',
          // },
          {
            title: '姓名',
            key: 'name',
            type: FormTypes.input,
            width: "90px",
            placeholder: '请输入${title}',
            defaultValue: '',
          },
          {
            title: '职务（职称）',
            key: 'zc',
            type: FormTypes.input,
            width: "90px",
            placeholder: '请输入${title}',
            defaultValue: '',
          },
          {
            title: '基本离 退休费',
            key: 'retirementPay',
            type: FormTypes.input,
            width: "90px",
            placeholder: '请输入${title}',
            defaultValue: '0.0',
            validateRules: [
              {
                // 修改后的正则：仅允许非负数字，支持整数或最多2位小数
                pattern: /^\d+(\.\d{1,2})?$/,
                message: "${title}格式不正确，仅支持非负整数或最多2位小数"
              }
            ],
          },
          {
            title: '2006年前增加 生活费',
            key: 'shf',
            type: FormTypes.input,
            width: "90px",
            placeholder: '请输入${title}',
            defaultValue: '0.0',
            validateRules: [
              {
                // 修改后的正则：仅允许非负数字，支持整数或最多2位小数
                pattern: /^\d+(\.\d{1,2})?$/,
                message: "${title}格式不正确，仅支持非负整数或最多2位小数"
              }
            ],
          },
          {
            title: '2006年后增加 生活费',
            key: 'zjshf',
            type: FormTypes.input,
            width: "90px",
            placeholder: '请输入${title}',
            defaultValue: '0.0',
            validateRules: [
              {
                // 修改后的正则：仅允许非负数字，支持整数或最多2位小数
                pattern: /^\d+(\.\d{1,2})?$/,
                message: "${title}格式不正确，仅支持非负整数或最多2位小数"
              }
            ],
          },
          {
            title: '2021年度增加养老金',
            key: 'zjylj',
            type: FormTypes.input,
            width: "90px",
            placeholder: '请输入${title}',
            defaultValue: '0.0',
            validateRules: [
              {
                // 修改后的正则：仅允许非负数字，支持整数或最多2位小数
                pattern: /^\d+(\.\d{1,2})?$/,
                message: "${title}格式不正确，仅支持非负整数或最多2位小数"
              }
            ],
          },
          {
            title: '2022年度增加养老金',
            key: 'zj',
            type: FormTypes.input,
            width: "90px",
            placeholder: '请输入${title}',
            defaultValue: '0.0',
            validateRules: [
              {
                // 修改后的正则：仅允许非负数字，支持整数或最多2位小数
                pattern: /^\d+(\.\d{1,2})?$/,
                message: "${title}格式不正确，仅支持非负整数或最多2位小数"
              }
            ],
          },
          {
            title: '2023年度增加养老金',
            key: 'zjb',
            type: FormTypes.input,
            width: "90px",
            placeholder: '请输入${title}',
            defaultValue: '0.0',
            validateRules: [
              {
                // 修改后的正则：仅允许非负数字，支持整数或最多2位小数
                pattern: /^\d+(\.\d{1,2})?$/,
                message: "${title}格式不正确，仅支持非负整数或最多2位小数"
              }
            ],
          },
          {
            title: '2024年度增加养老金',
            key: 'zengjia',
            type: FormTypes.input,
            width: "90px",
            placeholder: '请输入${title}',
            defaultValue: '0.0',
            validateRules: [
              {
                // 修改后的正则：仅允许非负数字，支持整数或最多2位小数
                pattern: /^\d+(\.\d{1,2})?$/,
                message: "${title}格式不正确，仅支持非负整数或最多2位小数"
              }
            ],
          },
          {
            title: '2025年度增加养老金',
            key: 'zengjiabaoxu',
            type: FormTypes.input,
            width: "90px",
            placeholder: '请输入${title}',
            defaultValue: '0.0',
            validateRules: [
              {
                // 修改后的正则：仅允许非负数字，支持整数或最多2位小数
                pattern: /^\d+(\.\d{1,2})?$/,
                message: "${title}格式不正确，仅支持非负整数或最多2位小数"
              }
            ],
          },
          {
            title: '独生子女加发5%',
            key: 'dszv',
            type: FormTypes.input,
            width: "90px",
            placeholder: '请输入${title}',
            defaultValue: '0.0',
            validateRules: [
              {
                // 修改后的正则：仅允许非负数字，支持整数或最多2位小数
                pattern: /^\d+(\.\d{1,2})?$/,
                message: "${title}格式不正确，仅支持非负整数或最多2位小数"
              }
            ],
          },
          {
            title: '退休生活补贴',
            key: 'txshf',
            type: FormTypes.input,
            width: "90px",
            placeholder: '请输入${title}',
            defaultValue: '0.0',
            validateRules: [
              {
                // 修改后的正则：仅允许非负数字，支持整数或最多2位小数
                pattern: /^\d+(\.\d{1,2})?$/,
                message: "${title}格式不正确，仅支持非负整数或最多2位小数"
              }
            ],
          },
          {
            title: '加发5% 补贴',
            key: 'bt',
            type: FormTypes.input,
            width: "90px",
            placeholder: '请输入${title}',
            defaultValue: '0.0',
            validateRules: [
              {
                // 修改后的正则：仅允许非负数字，支持整数或最多2位小数
                pattern: /^\d+(\.\d{1,2})?$/,
                message: "${title}格式不正确，仅支持非负整数或最多2位小数"
              }
            ],
          },
          {
            title: '教龄满30年加发',
            key: 'jf',
            type: FormTypes.input,
            width: "90px",
            placeholder: '请输入${title}',
            defaultValue: '0.0',
            validateRules: [
              {
                // 修改后的正则：仅允许非负数字，支持整数或最多2位小数
                pattern: /^\d+(\.\d{1,2})?$/,
                message: "${title}格式不正确，仅支持非负整数或最多2位小数"
              }
            ],
          },
          {
            title: '特殊岗位津贴',
            key: 'allowance',
            type: FormTypes.input,
            width: "90px",
            placeholder: '请输入${title}',
            defaultValue: '0.0',
            validateRules: [
              {
                // 修改后的正则：仅允许非负数字，支持整数或最多2位小数
                pattern: /^\d+(\.\d{1,2})?$/,
                message: "${title}格式不正确，仅支持非负整数或最多2位小数"
              }
            ],
          },
          {
            title: '艰苦津贴',
            key: 'hardshipAllowance',
            type: FormTypes.input,
            width: "90px",
            placeholder: '请输入${title}',
            defaultValue: '0.0',
            validateRules: [
              {
                // 修改后的正则：仅允许非负数字，支持整数或最多2位小数
                pattern: /^\d+(\.\d{1,2})?$/,
                message: "${title}格式不正确，仅支持非负整数或最多2位小数"
              }
            ],
          },
          {
            title: '卫生费',
            key: 'wsf',
            type: FormTypes.input,
            width: "90px",
            placeholder: '请输入${title}',
            defaultValue: '0.0',
            validateRules: [
              {
                // 修改后的正则：仅允许非负数字，支持整数或最多2位小数
                pattern: /^\d+(\.\d{1,2})?$/,
                message: "${title}格式不正确，仅支持非负整数或最多2位小数"
              }
            ],
          },
          {
            title: '劳模荣誉津贴',
            key: 'lmryjt',
            type: FormTypes.input,
            width: "90px",
            placeholder: '请输入${title}',
            defaultValue: '0.0',
            validateRules: [
              {
                // 修改后的正则：仅允许非负数字，支持整数或最多2位小数
                pattern: /^\d+(\.\d{1,2})?$/,
                message: "${title}格式不正确，仅支持非负整数或最多2位小数"
              }
            ],
          },
          {
            title: '特供加发',
            key: 'tgjf',
            type: FormTypes.input,
            width: "90px",
            placeholder: '请输入${title}',
            defaultValue: '0.0',
            validateRules: [
              {
                // 修改后的正则：仅允许非负数字，支持整数或最多2位小数
                pattern: /^\d+(\.\d{1,2})?$/,
                message: "${title}格式不正确，仅支持非负整数或最多2位小数"
              }
            ],
          },
          {
            title: '预计涨工资',
            key: 'yzgz',
            type: FormTypes.input,
            width: "90px",
            placeholder: '请输入${title}',
            defaultValue: '0.0',
            validateRules: [
              {
                // 修改后的正则：仅允许非负数字，支持整数或最多2位小数
                pattern: /^\d+(\.\d{1,2})?$/,
                message: "${title}格式不正确，仅支持非负整数或最多2位小数"
              }
            ],
          },
          {
            title: '在职月数',
            key: 'zzys',
            type: FormTypes.input,
            width: "90px",
            placeholder: '请输入${title}',
            defaultValue: '1',
            validateRules: [
              {
                pattern: /^(1[0-2]|[1-9])$/,
                message: "${title}格式不正确，请输入1-12的整数"
              }
            ],
          },
          {
            title: '医疗保险（大额）',
            key: 'ylbxde',
            type: FormTypes.input,
            width: "90px",
            placeholder: '请输入${title}',
            defaultValue: '0.0',
            validateRules: [
              {
                // 修改后的正则：仅允许非负数字，支持整数或最多2位小数
                pattern: /^\d+(\.\d{1,2})?$/,
                message: "${title}格式不正确，仅支持非负整数或最多2位小数"
              }
            ],
          },
          {
            title: '取暖费',
            key: 'heatingFee',
            type: FormTypes.input,
            width: "90px",
            placeholder: '请输入${title}',
            defaultValue: '0.0',
            validateRules: [
              {
                // 修改后的正则：仅允许非负数字，支持整数或最多2位小数
                pattern: /^\d+(\.\d{1,2})?$/,
                message: "${title}格式不正确，仅支持非负整数或最多2位小数"
              }
            ],
          },
          // 1. 住房提租补贴
          {
            title: '住房提租补贴',
            key: 'housingRentSubsidy',
            type: FormTypes.input,
            width: "90px",
            placeholder: '自动计算',
            defaultValue: '0.00',
            disabled: true,
            validateRules: [
              { pattern: /^\d+(\.\d{1,2})?$/, message: "${title}格式不正确" }
            ],
          },
          // 2. 月应发合计
          {
            title: '月应发合计',
            key: 'monthlyTotal',
            type: FormTypes.input,
            width: "90px",
            placeholder: '自动计算',
            defaultValue: '0.00',
            disabled: true,
            validateRules: [
              { pattern: /^\d+(\.\d{1,2})?$/, message: "${title}格式不正确" }
            ],
          },
          // 3. 年应发合计
          {
            title: '年应发合计',
            key: 'annualTotal',
            type: FormTypes.input,
            width: "90px",
            placeholder: '自动计算',
            defaultValue: '0.00',
            disabled: true,
            validateRules: [
              { pattern: /^\d+(\.\d{1,2})?$/, message: "${title}格式不正确" }
            ],
          },
          // 4. 养老保险基数（年）
          {
            title: '养老保险基数（年）',
            key: 'ylbxjjs',
            type: FormTypes.input,
            width: "90px",
            placeholder: '自动计算',
            defaultValue: '0.00',
            disabled: true,
            validateRules: [
              { pattern: /^\d+(\.\d{1,2})?$/, message: "${title}格式不正确" }
            ],
          },
          // 5. 养老保险（72%）
          {
            title: '养老保险（72%）',
            key: 'yangleibx',
            type: FormTypes.input,
            width: "90px",
            placeholder: '自动计算',
            defaultValue: '0.00',
            disabled: true,
            validateRules: [
              { pattern: /^\d+(\.\d{1,2})?$/, message: "${title}格式不正确" }
            ],
          },
          // 6. 医疗保险基数（年）
          {
            title: '医疗保险基数（年）',
            key: 'yiliaobxjjs',
            type: FormTypes.input,
            width: "90px",
            placeholder: '自动计算',
            defaultValue: '0.00',
            disabled: true,
            validateRules: [
              { pattern: /^\d+(\.\d{1,2})?$/, message: "${title}格式不正确" }
            ],
          },
          // 7. 参公医保（5%）
          {
            title: '参公医保（5%）',
            key: 'cgyb',
            type: FormTypes.input,
            width: "90px",
            placeholder: '自动计算',
            defaultValue: '0.00',
            disabled: true,
            validateRules: [
              { pattern: /^\d+(\.\d{1,2})?$/, message: "${title}格式不正确" }
            ],
          },
          // 8. 预计社保返还资金
          {
            title: '预计社保返还资金',
            key: 'yjsbhfzj',
            type: FormTypes.input,
            width: "90px",
            placeholder: '自动计算',
            defaultValue: '0.00',
            disabled: true,
            validateRules: [
              { pattern: /^\d+(\.\d{1,2})?$/, message: "${title}格式不正确" }
            ],
          },








        ]
      },
      url: {
        add: "/cw/cwTxrygzjbxmxbTj/add",
        edit: "/cw/cwTxrygzjbxmxbTj/edit",
        cwTxrygzjbxmxb: {
          list: '/cw/cwTxrygzjbxmxbTj/queryCwTxrygzjbxmxbByMainId'
        },
        getByYear: '/cw/cwTxrygzjbxmxbTj/list' // 复用CwTjForm的年度查询接口
      },
      calcTimer: null, // 防抖避免频繁计算
      isManualChange: false // 标记是否手动修改过表单年度

    }
  },
  props: {
    disabled: {
      type: Boolean,
      default: false,
      required: false
    },
    scene: { // 接收 Modal 传递的场景值
      type: String,
      default: ''
    }
  },
  computed: {
    formDisabled() {
      return this.disabled
    },
    ...mapState({ globalYear: state => state.app.globalYear })
  },
  watch: {
    // 监听全局年度变化，同步到表单（仅当未手动修改时）
    globalYear(newVal) {
      if (!this.isManualChange) {
        this.model.year = newVal
        // 可选：自动触发年度查询，解开注释即可
        // this.handleYearChange(newVal)
      }
    },
    // 监听表单年度变化，标记是否手动修改
    'model.year'(newVal, oldVal) {
      if (oldVal && newVal !== this.globalYear) {
        this.isManualChange = true // 手动修改后，不再同步全局年度
      }
    }
  },

  created() {
    // 初始化时同步全局年度
    this.model.year = this.globalYear
    const scene = this.scene; // 接收 Modal 传递的 scene（add/edit）
    this.currentScene = scene; // 存储到本地变量，后续复用
    console.log(scene)
    if (scene=='add'){
      this. handleYearChange(this.model.year)
    }
  },
  methods: {
    // 1. 统一监听表格值变化，触发计算（防抖处理）
    handleTableValueChange({ row, column, value }) {
      console.log("退休人员表值变化：", "列名=", column.key, "新值=", value, "当前行=", row);

      // 防抖清理
      if (this.calcTimer) {
        clearTimeout(this.calcTimer);
      }

      // 定义触发计算的字段（所有参与公式的输入字段）
      const triggerFields = [
        'retirementPay', 'shf', 'zjshf', 'zjylj', 'zj', 'zjb', 'zengjia', 'zengjiabaoxu',
        'dszv', 'txshf', 'bt', 'jf', 'allowance', 'wsf', 'tgjf', 'yzgz', 'zzys'
      ];

      // 仅修改上述字段时触发计算
      if (triggerFields.includes(column.key)) {
        this.calcTimer = setTimeout(() => {
          this.calculateAll(row); // 执行全量计算
        }, 50);
      }
    },

    // 2. 安全解析数字（处理空值、非数字、负数）
    safeParseNumber(value) {
      if (value === null || value === undefined) return 0;
      const num = parseFloat(value.toString().replace(/[^\d.-]/g, ''));
      return isNaN(num) ? 0 : Math.max(0, num); // 确保非负
    },

    // 3. 核心计算方法：按公式计算所有自动字段
    calculateAll(row) {
      if (!row) return;

      try {
        // ---------------------- 解析基础输入值 ----------------------
        const retirementPay = this.safeParseNumber(row.retirementPay); // 基本离退休费
        const shf = this.safeParseNumber(row.shf); // 2006年前增加生活费
        const zjshf = this.safeParseNumber(row.zjshf); // 2006年后增加生活费
        const zjylj = this.safeParseNumber(row.zjylj); // 2021年度增加养老金
        const zj = this.safeParseNumber(row.zj); // 2022年度增加养老金
        const zjb = this.safeParseNumber(row.zjb); // 2023年度增加养老金
        const zengjia = this.safeParseNumber(row.zengjia); // 2024年度增加养老金
        const zengjiabaoxu = this.safeParseNumber(row.zengjiabaoxu); // 2025年度增加养老金
        const dszv = this.safeParseNumber(row.dszv); // 独生子女加发5%
        const txshf = this.safeParseNumber(row.txshf); // 退休生活补贴
        const bt = this.safeParseNumber(row.bt); // 加发5%补贴
        const jf = this.safeParseNumber(row.jf); // 教龄满30年加发
        const allowance = this.safeParseNumber(row.allowance); // 特殊岗位津贴
        const wsf = this.safeParseNumber(row.wsf); // 卫生费
        const tgjf = this.safeParseNumber(row.tgjf); // 特供加发
        const yzgz = this.safeParseNumber(row.yzgz); // 预计涨工资
        const zzys = this.safeParseNumber(row.zzys); // 在职月数（默认1）
        const jk = this.safeParseNumber(row.hardshipAllowance); // 在职月数（默认1）
        const lm = this.safeParseNumber(row.lmryjt); // 在职月数（默认1）

        // ---------------------- 按公式计算自动字段 ----------------------
        // 1. 住房提租补贴 = (((基本离退休费+2006年前+2006年后+2021-2025养老金+独生子女+退休生活补贴+加发5%+教龄+特殊岗位津贴)+卫生费+特供加发+预计涨工资)*0.13)
        const part1 = retirementPay + shf + zjshf + zjylj + zj + zjb + zengjia + zengjiabaoxu + dszv + txshf + bt + jf + allowance;
        const housingRentSubsidy = Number((part1 + wsf + tgjf + yzgz) * 0.13).toFixed(2);

        // 2. 月应发合计 = 基础补贴总和 + 卫生费+特供加发+预计涨工资 + 住房提租补贴
        const monthlyTotal = Number(part1 + wsf + tgjf + yzgz + jk + lm + Number(housingRentSubsidy)).toFixed(2);

        // 3. 年应发合计 = 月应发合计 × 在职月数
        const annualTotal = Number(Number(monthlyTotal) * zzys).toFixed(2);

        // 4. 养老保险基数（年） = (月应发合计 - 住房提租补贴 - 预计涨工资) × 在职月数
        const ylbxjjs = Number((Number(monthlyTotal) - Number(housingRentSubsidy) - yzgz) * zzys).toFixed(2);

        // 5. 养老保险（72%） = 养老保险基数（年）×0.72
        const yangleibx = Number(Number(ylbxjjs) * 0.72).toFixed(2);

        // 6. 医疗保险基数（年） = 年应发合计
        const yiliaobxjjs = annualTotal; // 直接复用年应发合计结果

        // 7. 参公医保（5%） = 医疗保险基数（年）×0.05
        const cgyb = Number(Number(yiliaobxjjs) * 0.05).toFixed(2);

        // 8. 预计社保返还资金 = 养老保险基数（年）
        const yjsbhfzj = ylbxjjs; // 直接复用养老保险基数结果

        // ---------------------- 更新表格数据 ----------------------
        this.updateCalculatedFields(row, {
          housingRentSubsidy,
          monthlyTotal,
          annualTotal,
          ylbxjjs,
          yangleibx,
          yiliaobxjjs,
          cgyb,
          yjsbhfzj
        });

      } catch (error) {
        console.error("退休人员表计算出错：", error);
        this.$message.error("自动计算失败，请检查输入数据格式");
      }
    },

    // 4. 更新表格中的计算结果（适配j-editable-table组件）
    updateCalculatedFields(row, fields) {
      const tableRef = this.$refs[this.refKeys[0]];
      if (!tableRef) return;

      // 使用组件API更新数据（优先用setValues，兼容setCellValue）
      if (tableRef.setValues) {
        tableRef.setValues([{
          rowKey: row.id || row._rowKey, // 适配组件的行标识
          values: fields
        }]);
      } else if (tableRef.setCellValue) {
        const rowIndex = this.cwTxrygzjbxmxbTable.dataSource.findIndex(
          item => item.id === row.id || item._rowKey === row._rowKey
        );
        if (rowIndex !== -1) {
          Object.entries(fields).forEach(([key, value]) => {
            tableRef.setCellValue(rowIndex, key, value);
          });
        }
      }

      // 同步更新dataSource，确保数据一致性
      this.$nextTick(() => {
        const dataIndex = this.cwTxrygzjbxmxbTable.dataSource.findIndex(
          item => item.id === row.id || item._rowKey === row._rowKey
        );
        if (dataIndex !== -1) {
          Object.entries(fields).forEach(([key, value]) => {
            this.$set(this.cwTxrygzjbxmxbTable.dataSource[dataIndex], key, value);
          });
        }
      });
    },

    // 5. 新增行初始化
    addBefore() {
      this.cwTxrygzjbxmxbTable.dataSource = [];
      this.$nextTick(() => {
        const defaultRow = {
          id: Date.now().toString(),
          name: '',
          zc: '',
          retirementPay: '0.0',
          shf: '0.0',
          zjshf: '0.0',
          zjylj: '0.0',
          zj: '0.0',
          zjb: '0.0',
          zengjia: '0.0',
          zengjiabaoxu: '0.0',
          dszv: '0.0',
          txshf: '0.0',
          bt: '0.0',
          jf: '0.0',
          allowance: '0.0',
          hardshipAllowance: '0.0',
          wsf: '0.0',
          lmryjt: '0.0',
          tgjf: '0.0',
          yzgz: '0.0',
          zzys: '1',
          ylbxde: '0.0',
          heatingFee: '0.0',
          // 自动计算字段默认值
          housingRentSubsidy: '0.00',
          monthlyTotal: '0.00',
          annualTotal: '0.00',
          ylbxjjs: '0.00',
          yangleibx: '0.00',
          yiliaobxjjs: '0.00',
          cgyb: '0.00',
          yjsbhfzj: '0.00'
        };
        this.cwTxrygzjbxmxbTable.dataSource.push(defaultRow);
        this.calculateAll(defaultRow); // 初始化计算
      });
    },

    // 6. 编辑回显后重新计算所有行
    editAfter() {
      this.$nextTick(() => {
        this.cwTxrygzjbxmxbTable.dataSource.forEach(row => {
          this.calculateAll(row);
        });
      });
      if (this.model.id) {
        let params = { id: this.model.id };
        getAction(this.url.cwTxrygzjbxmxb.list, params).then(res => {
          if (res.success) {
            this.cwTxrygzjbxmxbTable.dataSource = res.result.records || [];
            this.$nextTick(() => {
              this.cwTxrygzjbxmxbTable.dataSource.forEach(row => {
                this.calculateAll(row);
              });
            });
          }
        }).finally(() => {
          this.cwTxrygzjbxmxbTable.loading = false;
        });
      }
    },

    getAllTable() {
      let values = this.tableKeys.map(key => getRefPromise(this, key))
      return Promise.all(values)
    },

    validateSubForm(allValues) {
      return new Promise((resolve, reject) => {
        Promise.all([]).then(() => {
          resolve(allValues)
        }).catch(e => {
          if (e.error === VALIDATE_NO_PASSED) {
            this.activeKey = e.index == null ? this.activeKey : this.refKeys[e.index]
          } else {
            console.error(e)
          }
        })
      })
    },
    classifyIntoFormData(allValues) {
      let main = Object.assign(this.model, allValues.formValue)
      return {
        ...main,
        cwTxrygzjbxmxbList: allValues.tablesValue[0].values,
      }
    },
    validateError(msg) {
      this.$message.error(msg)
    },
    close() {
      this.visible = false
      this.$emit('close')
      if (this.$refs.form) {
        this.$refs.form.clearValidate();
      }
    },
    async handleYearChange(year) {
      // 清空逻辑：未选择年度时，保留单位，清空其他数据
      if (!year) {
        this.model = { unit: this.model.unit }
        this.cwTxrygzjbxmxbTable.dataSource = []
        return
      }

      // 加载状态：主表+子表同时加载
      this.confirmLoading = true
      this.cwTxrygzjbxmxbTable.loading = true

      try {
        // 调用年度查询接口
        const yearResponse = await getAction(this.url.getByYear, { year })

        if (yearResponse.success && yearResponse.result.records.length > 0) {
          const mainRecord = yearResponse.result.records[0]
          // 主表数据回显：保留用户已选的unit和year，合并接口返回的其他字段
          this.model = {
            ...this.model,
            ...mainRecord
          }

          // 使用返回的mainId调用明细表列表接口
          if (mainRecord.id) {
            const detailResponse = await getAction(this.url.cwTxrygzjbxmxb.list, {
              id: mainRecord.id
            })

            if (detailResponse.success) {
              this.cwTxrygzjbxmxbTable.dataSource = detailResponse.result.records || []
            } else {
              this.$message.warning('获取退休人员工资及保险明细表数据失败：' + (detailResponse.message || '未知错误'))
              this.cwTxrygzjbxmxbTable.dataSource = []
            }
          } else {
            this.$message.warning('未获取到明细表关联ID，无法加载明细数据')
            this.cwTxrygzjbxmxbTable.dataSource = []
          }
        } else {
          // 接口返回失败（如无数据），显示警告并清空子表
          this.$message.warning(yearResponse.message || '该年度暂无数据')
          this.cwTxrygzjbxmxbTable.dataSource = []
          this.model.id = undefined;

        }
      } catch (error) {
        // 异常处理
        console.error('查询接口异常：', error)
        this.$message.error('查询失败，请刷新页面重试或联系管理员')
        this.cwTxrygzjbxmxbTable.dataSource = []
      } finally {
        // 关闭加载状态（无论成功/失败）
        this.confirmLoading = false
        this.cwTxrygzjbxmxbTable.loading = false
      }
    }
  }
}
</script>

<style scoped></style>